package practice;

public class LeetCode2 {
	public static void main(String[] args) {
		// 测试数据
		ListNode l1 = new ListNode(9);
		ListNode l2 = new ListNode(1, new ListNode(9, new ListNode(0, new ListNode(9))));
		ListNode res = new Solution().addTwoNumbers(l1, l2);
		// 遍历链表显示数据
		while(res != null) {
			System.out.println(res.val);
			res = res.next;
		}
	}
}

class Solution {
	public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		//定义头节点
		ListNode L = new ListNode();
		ListNode R = L;
		int r1 = -1, r2 = -1, t = 0, r = -1, s;
		while(l1 != null || l2 != null) {
			if(l1 != null) {
				r1 = l1.val;
				l1 = l1.next;
			}
			if(l2 != null) {
				r2 = l2.val;
				l2 = l2.next;
			}
			if(r1 != -1 && r2 != -1) {
				s = r1 + r2 + t;
				// 重新初始化
				r1 = r2 = -1; t = 0;
				if(s < 10) {
					r = s;
				} else {
					r = s % 10; // 余数
					t = s / 10; // 需要进位的数
				}
			} else if(r1 == -1 && r2 != -1) {
				s = r2 + t;
				// 重新初始化
				r2 = -1; t = 0;
				if(s < 10) {
					r = s;
				} else {
					r = s % 10; // 余数
					t = s / 10; // 需要进位的数
				}
			} else if(r1 != -1 && r2 == -1) {
				s = r1 + t;
				// 重新初始化
				r1 = -1; t = 0;
				if(s < 10) {
					r = s;
				} else {
					r = s % 10; // 余数
					t = s / 10; // 需要进位的数
				}
			}
			// 创建一个新的节点
			ListNode node = new ListNode(r);
			R.next = node;
			R = R.next;
		}
		// 判断最后的进位数是否存在
		if(t != 0) {
			ListNode node = new ListNode(t);
			R.next = node;
		}
		return L.next;
	}
}

// 链表定义
class ListNode {
	int val;
	ListNode next;
	ListNode() {}
	ListNode(int val) { this.val = val; }
	ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
